/**
 * 
 */
package de.mbenning.fsim.persistence.dao;

import org.hibernate.ObjectNotFoundException;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import de.mbenning.fsim.domain.Liga;
import de.mbenning.fsim.domain.Paarung;
import de.mbenning.fsim.domain.Spielplan;
import de.mbenning.fsim.domain.Spieltag;
import de.mbenning.fsim.domain.Verein;
import de.mbenning.fsim.persistence.dao.interfaces.ISpielplanDAO;

/**
 * @author Martin.Benning
 *
 */
@Repository("spielplanDAO")
public class SpielplanDAO extends HibernateDaoSupport implements ISpielplanDAO {

	@Autowired
	public SpielplanDAO(SessionFactory sessionFactory) {
		this.setSessionFactory(sessionFactory);
	}
	
	@Override
	public Spielplan getSpielplanByLiga(Liga liga) {
		for (final Object object : getHibernateTemplate().find(" FROM Spielplan A WHERE A.saison.liga.id = ?", liga.getId())) {
            return (Spielplan) object;
        }
        throw new ObjectNotFoundException("Spielplan", Spielplan.class.getName());
	}

	@Override
	public Spielplan getSpielplanById(int id) {
		for (final Object object : getHibernateTemplate().find(" FROM Spielplan A WHERE A.id = ?", id)) {
            return (Spielplan) object;
        }
        throw new ObjectNotFoundException("Spielplan", Spielplan.class.getName());
	}

	@Override
	public Spieltag getSpieltag(int spieltag) {
		for (final Object object : getHibernateTemplate().find(" FROM Spieltag A WHERE A.nummer = ?", spieltag)) {
            return (Spieltag) object;
        }
        throw new ObjectNotFoundException("Spieltag", Spieltag.class.getName());
	}

	@Override
	public Paarung getPaarungByVereine(Spielplan spielplan, Verein heim, Verein gast) {
		for (final Object object : getHibernateTemplate().find(" FROM Paarung A WHERE A.heim.id  = ? AND A.gast.id = ? AND A.spielplan.id = ? ", new Integer[] {heim.getId(), gast.getId(), spielplan.getId()})) {
            return (Paarung) object;
        }
        throw new ObjectNotFoundException("Paarung", Paarung.class.getName());
	}
	
}
